var isEmailVisible = false;
var baseText1 = "enter your name";
var baseText2 = "enter your email";
var baseText3 = "enter email address, separate each with a comma";

var element1 = null;
var element2 = null;
var element3 = null;
var element4 = null;

function getHtmlElement( name ) {
	if( document.getElementById ) {	 // DOM3 = IE5, NS6
		return document.getElementById( name );
	} else {
		if( document["layers"] ) {	 // Netscape 4
			return document[name];
		} else {	 // IE 4
			return document.all[name];
		}
	}
}

function input_onFocus( element, id ) {
	var txt = id == 1 ? baseText1 : id == 2 ? baseText2 : baseText3;
	if ( this["element"+id] == null ) this["element"+id] = element;

	if ( element.value == txt ) {
		element.value = "";
		element.style.fontStyle = "normal";
		element.style.color = "black";
	}
}

function input_onFocusLost( element, id ) {
	var txt = id == 1 ? baseText1 : id == 2 ? baseText2 : baseText3;
	if ( element.value == "" ) {
		element.value = txt;
		element.style.fontStyle = "italic";
		element.style.color = "#999999";
	}
}

function showEmail() {
	isEmailVisible = true;

	var email = getHtmlElement( "email_div" );
	if( email ) {
		email.style.left = (document.body.clientWidth - email.clientWidth) / 2;
		email.style.top = (document.body.clientHeight - email.clientHeight) / 2;
		email.style.visibility = "visible";
	}

	var back = getHtmlElement( "overlay_div" );
	if( back ) {
		back.style.visibility = "visible";
		back.style.width = document.body.scrollWidth;
		back.style.height = document.body.scrollHeight;
	}
}

function text_onFocus( input ) {
	element4 = input;
}

function textchange( input )
{
	var count = 500;
 	if ( input.value.length  > count) {
 		input.value = input.value.substring(0,count);
		input.scrollTop = input.scrollHeight;
 	}
}

function hideEmail() {
	isEmailVisible = false;

	if ( element1 != null ) {
		element1.value = "";
		input_onFocusLost( element1, 1 );
	}
	if ( element2 != null ) {
		element2.value = "";
		input_onFocusLost( element2, 2 );
	}
	if ( element3 != null ) {
		element3.value = "";
		input_onFocusLost( element3, 3 );
	}
	if ( element4 ) element4.value = "";

	var email = getHtmlElement( "email_div" );
	if( email ) {
		email.style.visibility = "hidden";
	}

	var back = getHtmlElement( "overlay_div" );
	if( back ) {
		back.style.visibility = "hidden";
	}
}

function onResize() {
	if( isEmailVisible ) {
		var email = getHtmlElement( "email_div" );
		email.style.left = (document.body.clientWidth - email.clientWidth) / 2;
		email.style.top = (document.body.clientHeight - email.clientHeight) / 2;
	}
}

function sendEmailResponse(req){
	var email = getHtmlElement("email_div");
	var respXML=req.responseXML;
	var success = respXML.documentElement.getAttribute('success');

	hideEmail();
	
	if (success == "true") {
		window.alert("Thank you!");
	}
	else {
		var message = respXML.documentElement.getAttribute('message'); 
		if (message == "") message = "We're sorry!  We are having technical difficulties and your email could not be sent.  Please try again later.";
		window.alert(message);
	}
}

function sendEmail() {
	var shareFromName = getHtmlElement("shareFromName");
	var shareFromEmail = getHtmlElement("shareFromEmail");
	var shareToEmail = getHtmlElement("shareToEmail");
	var shareMessage = getHtmlElement("shareMessage").value;
	if ((shareFromName.value == "") || (shareFromName.value == baseText1) || (shareFromEmail.value == "") || (shareFromEmail.value == baseText2) || (shareToEmail.value == "") || (shareToEmail.value == baseText3))
	{
		window.alert('Please complete all fields marked "required" to send your email.');
		return;
	}
	if (!isValidEmailAddress(shareFromEmail.value)) {
		alert("Your email address is invalid.");
		return;
	}
	if (!isValidEmailAddress(shareToEmail.value)) {
		alert("Your friend's email address is invalid.");
		return;
	}
	if (shareMessage.length > 500) {
		alert("Message exceeds limit of 500 characters");
		return;
	}

	shareMessage = breakLongWords(shareMessage, 50);
	var shareSubject = shareFromName.value + " thought you would be interested in the Disney Vacation Connection widget!";
	var params = '<Root brandID="460" themeID="119" fromName="' + escape(shareFromName.value) + '" fromEmail="' + shareFromEmail.value + '" toName="" toEmail="' + shareToEmail.value + '" body="' + escape(shareMessage) + '" escaped="1" subject="' + escape(shareSubject) + '" templateName="email_download"></Root>';
	AjaxRequest("/services/sendEmail.aspx", sendEmailResponse, "post", params);
}

function breakLongWords(txt, wordMaxLength) {
	var lines = txt.split("\n");
	for(var i = 0; i < lines.length; i++) {
		var words = lines[i].split(" ");
		for(var j = 0; j < words.length; j++) {
			if (words[j].length > wordMaxLength) {
				while((words[j].length - words[j].lastIndexOf("\n")) > wordMaxLength) {
					words[j] = words[j].slice(0, words[j].lastIndexOf("\n") + 1 + wordMaxLength) + "\n" + words[j].slice(words[j].lastIndexOf("\n") + 1 + wordMaxLength);
				}
			}
		}
		lines[i] = words.join(" ");
	}
	return lines.join("\n");
}

function isValidEmailAddress(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   //alert("Invalid E-mail ID")
	   return false;
	}
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   //alert("Invalid E-mail ID")
	   return false;
	}
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==(lstr-1)){
	    //alert("Invalid E-mail ID")
	    return false;
	}
	 if (str.indexOf(at,(lat+1))!=-1){
	    //alert("Invalid E-mail ID")
	    return false;
	 }
	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    //alert("Invalid E-mail ID")
	    return false;
	 }
	 if (str.indexOf(dot,(lat+2))==-1){
	    //alert("Invalid E-mail ID")
	    return false;
	 }
	 if (str.indexOf(" ")!=-1){
	    //alert("Invalid E-mail ID")
	    return false;
	 }
	 return true;
}

