// PROVIDES FUNCTIONALITY FOR SIGNING UP TO NEWSLETTER WITHOUT LEAVING PAGE

/* Example of use:
   <div style="height: 60px; overflow: hidden;">
      <div id="newsletter-text-area">
         Sign up for our newsletter. Be the first to hear about new products, specials, and more.. no spam we promise!
         <br/><br/><div id="newsletter-status-message"></div>
      </div>
   </div>
   
   <div>
      <form onSubmit="return newsletter_submit ();">
      Email Address:
      <input class="field" name="newsletter-email-address" id="newsletter-email-address" type="text" onKeyPress="newsletter_hide_message ();" />
      <input name="" value="Join" type="image" src="http://devwww.amazingmail.com/images/showcase/btn_join.jpg" />
      </form>
   </div>
*/

var newsletter_scroll_start = 0;
var newsletter_scroll_end = -60;

var newsletter_scroll_position, newsletter_scroll_current_position;
var newsletter_showing_error = false;
var newsletter_signed_up = false;

var newsletter_system_error_message = "There was an error saving your email address.  Please sign up from <a href='myaccount.php'>My Account</a>.";

function newsletter_submit () {
   
   // do nothing if already signed up
   if (newsletter_signed_up) return false;
   
   // set message positions
   newsletter_scroll_position = newsletter_scroll_end;
   newsletter_scroll_current_position = newsletter_scroll_start;
   
   // load the email address field value
   var email_address = document.getElementById("newsletter-email-address").value;
   
   // if email exists and appears valid, write to newsletter table
   if (newsletter_valid_email_address (email_address)) {
      newsletter_load_xml (email_address);
   }
   
   // give error message if email is not valid
   else {
      if (!email_address) newsletter_display_error ("Please enter your email address and then click Join.");
      else newsletter_display_error ("Please correct your email address below and click Join.");
   }
   
   // return false to suppress form submit
   return false;
}

function newsletter_valid_email_address (email) {
   
   // just make sure that the @ and . are there - nothing fancy
   return (email && email.indexOf("@") > 0 && email.indexOf(".") > 0);
   
}

function newsletter_hide_message () {
   
   // scroll back to original position
   if (newsletter_showing_error) {
      newsletter_scroll_position = newsletter_scroll_start;
      newsletter_scroll_current_position = newsletter_scroll_end;
      newsletter_showing_error = false;
      newsletter_scroll_to_message ();
   }
   
}

function newsletter_scroll_to_message () {
   
   // find new position and set on the text area
   newsletter_scroll_current_position = newsletter_scroll_current_position + ((newsletter_scroll_position - newsletter_scroll_current_position) / 6);
   if (newsletter_scroll_position > newsletter_scroll_current_position) newsletter_scroll_current_position = Math.ceil(newsletter_scroll_current_position);
   else newsletter_scroll_current_position = Math.floor(newsletter_scroll_current_position);
   document.getElementById("newsletter-text-area").style.marginTop = newsletter_scroll_current_position + "px";
   
   // make next scroll step if not aready hit the target position
   if (newsletter_scroll_current_position != newsletter_scroll_position) {
      window.setTimeout("newsletter_scroll_to_message()", 30);
   }
   
}

var newsletter_xml_http;
function newsletter_load_xml (email) {
   newsletter_xml_http = null;
   if (window.XMLHttpRequest) newsletter_xml_http = new XMLHttpRequest ();
   else if (window.ActiveXObject) newsletter_xml_http = new ActiveXObject("Microsoft.XMLHTTP");
  
   if (newsletter_xml_http != null) {
      newsletter_xml_http.onreadystatechange = newsletter_state_change;
      newsletter_xml_http.open ("GET", "/services/newsletter.php?email=" + email, true);
      newsletter_xml_http.send (null);
   }
   else newsletter_display_error (newsletter_system_error_message);
}

function newsletter_state_change () {
   if (newsletter_xml_http.readyState == 4) { // 4 = "loaded"
      if (newsletter_xml_http.status == 200) {// 200 = OK
         var value = newsletter_xml_http.responseXML.documentElement.firstChild.nodeValue;
         if (value == "SUCCESS") newsletter_set_successful ();
         else newsletter_display_error (newsletter_system_error_message);
      }
      else newsletter_display_error (newsletter_system_error_message);
   }
}

function newsletter_set_successful () {
   document.getElementById("newsletter-status-message").innerHTML = "<span style='color: #073b8e; font-weight: bold;'>Thank you for signing up for our newsletter.  You can unsubscribe using the link within our newsletter email.</span>";
   newsletter_signed_up = true;
   newsletter_scroll_to_message ();
}

function newsletter_display_error (error) {
   document.getElementById("newsletter-status-message").innerHTML = "<span style='color: #a30003; font-weight: bold;'>" + error + "</span>";
   newsletter_showing_error = true;
   newsletter_scroll_to_message ();   
}

