var originalpage;
var savedemail;
var emailvalidation;
var npavalidation;
var nxxvalidation;
var xxxxvalidation;
var messagevalidation;

function nav(e) {
  if((e.keyCode >=35 && e.keyCode <= 40) || e.keyCode == 9 || e.which == 8 || e.which == 46)
    return true;
  else
    return false;
}

function initialize() {
  if(getCookie("agreetos") && document.getElementById("agreetos")) {
    document.getElementById("agreetos").checked = true;
  }

  // Set up field validation
  if(document.getElementById("from")) {
    emailvalidation = new LiveValidation("from", {validMessage: "\t", insertAfterWhatNode: "emailerror"});
    emailvalidation.add(Validate.Presence, { failureMessage: "Email cannot be empty"});
    emailvalidation.add(Validate.Email, { failureMessage: "Invalid email address."});
  }

  if(document.getElementById("npa")) {
    npavalidation = new LiveValidation("npa", {validMessage: "\t", insertAfterWhatNode: "npaerror"});
    npavalidation.add(Validate.Presence, { failureMessage: "Area code must be 3 digits."});
    npavalidation.add(Validate.Length, { wrongLengthMessage: "Area code must be 3 digits.", is: 3});
    npavalidation.add(Validate.Format, { pattern: /^[2-9][0-8]\d$/i, failureMessage: "Invalid area code."});

    nxxvalidation = new LiveValidation("nxx", {validMessage: "\t", insertAfterWhatNode: "nxxerror"});
    nxxvalidation.add(Validate.Presence, { failureMessage: "Prefix must be 3 digits."});
    nxxvalidation.add(Validate.Length, { wrongLengthMessage: "Prefix must be 3 digits.", is: 3});
    nxxvalidation.add(Validate.Format, { pattern: /^[2-9]\d{2}$/i, failureMessage: "Invalid dialing prefix."});

    xxxxvalidation = new LiveValidation("xxxx", {validMessage: "\t", insertAfterWhatNode: "xxxxerror"});
    xxxxvalidation.add(Validate.Presence, { failureMessage: "Please enter last 4 digits of number."});
    xxxxvalidation.add(Validate.Length, { wrongLengthMessage: "Please enter last 4 digits of number.", is: 4});
    xxxxvalidation.add(Validate.Format, { pattern: /^\d{4}$/i, failureMessage: "Invalid value for last 4 digits of number."});
  }

  if(document.getElementById("message")) {
    try {
      messagevalidation = new LiveValidation("message", {validMessage: "\t", insertAfterWhatNode: "messageerror"});
      messagevalidation.add(Validate.Presence, { failureMessage: "Please enter a message."});
      messagevalidation.add(Validate.Length, { maximum: 140-String("\n-ForeverSMS.com" + document.getElementById("from").value).length, tooLongMessage: "Message is too long (max is " + (140-String("/n-ForeverSMS.com"  + document.getElementById("from").value).length) + ")."});
	}
	catch (err) {
	  // Do nothing
	}
  }
}

function loadpage(url, before, callback) {
  var httprequest;
  var beforereturn;
  beforereturn = before();
  try { httprequest = new XMLHttpRequest(); } catch(e) {}
  try { httprequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { httprequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  if(httprequest != undefined) {
    httprequest.open("GET", url, true);
    httprequest.onreadystatechange = function () {
      if (httprequest.readyState != 4)  { return; }
      callback({responseText: httprequest.responseText, responseXML: httprequest.responseXML, input: beforereturn});
    };
    httprequest.send(null);
  }
}

function savepage() {
  document.getElementById("messagesize").innerHTML = "";
  originalpage = document.getElementById("g_body").innerHTML;
  savedemail = document.getElementById("from").value;
}

function restorepage() {
  document.getElementById("g_body").innerHTML = originalpage;
  document.getElementById("from").value = savedemail;
  initialize();
}

function toscheck() {
  if(document.getElementById("agreetos").checked) {
    setCookie("agreetos", "true", 365, "/", "foreversms.com");
  }
  else {
    delCookie("agreetos", "/", "foreversms.com");
  }
}

function sendmessage() {
  // Validate the form
  var errors = new Array();
  if (!LiveValidation.massValidate([emailvalidation])) {
    if(document.getElementById("from").value.length == 0)
      errors[errors.length] = "Email required.";
    else
      errors[errors.length] = "Invalid email address.";
  }
  if (!LiveValidation.massValidate([npavalidation])) {
    if(document.getElementById("npa").value.length == 0)
      errors[errors.length] = "Area code required.";
    else
      errors[errors.length] = "Invalid area code.";
  }
  if (!LiveValidation.massValidate([nxxvalidation])) {
    if(document.getElementById("nxx").value.length == 0)
      errors[errors.length] = "Dialing prefix required.";
    else
      errors[errors.length] = "Invalid dialing prefix.";
  }
  if (!LiveValidation.massValidate([xxxxvalidation])) {
    if(document.getElementById("xxxx").value.length == 0)
      errors[errors.length] = "Last 4 digits of number required.";
    else
      errors[errors.length] = "Invalid last 4 digits of number.";
  }
  if (!LiveValidation.massValidate([messagevalidation])) {
    if(document.getElementById("message").value.length == 0)
      errors[errors.length] = "Message required.";
    else
      errors[errors.length] = "Message is too long (max is " + (140-String("/n-ForeverSMS.com" + document.getElementById("from").value).length) + ").";
  }
  if (!document.getElementById("agreetos").checked) {
    errors[errors.length] = "Agree to the terms of service.";
  }
  if (errors.length > 0) {
    alert("Please resolve the following issues:\n\t" + errors.join("\n\t"));
    return;
  }
  // Submit the form
  document.getElementById("messageform").submit();
  
}

function removeme() {
  // Validate the form
  var errors = new Array();
  if (!LiveValidation.massValidate([npavalidation])) {
    if(document.getElementById("npa").value.length == 0)
      errors[errors.length] = "Area code required.";
    else
      errors[errors.length] = "Invalid area code.";
  }
  if (!LiveValidation.massValidate([nxxvalidation])) {
    if(document.getElementById("nxx").value.length == 0)
      errors[errors.length] = "Dialing prefix required.";
    else
      errors[errors.length] = "Invalid dialing prefix.";
  }
  if (!LiveValidation.massValidate([xxxxvalidation])) {
    if(document.getElementById("xxxx").value.length == 0)
      errors[errors.length] = "Last 4 digits of number required.";
    else
      errors[errors.length] = "Invalid last 4 digits of number.";
  }
  if (errors.length > 0) {
    alert("Please resolve the following issues:\n\t" + errors.join("\n\t"));
    return;
  }

  // Get the form values
  npa = document.getElementById("npa").value;
  nxx = document.getElementById("nxx").value;
  xxxx = document.getElementById("xxxx").value;
  company = document.getElementById("carrier").value;

  loadpage(
    "/sms/sendcode.php?npa=" + npa + "&nxx=" + nxx + "&xxxx=" + xxxx + "&company=" + company + "&requesttype=remove",
    function () {
      document.getElementById("g_body").innerHTML = "<h2>Remove My Number</h2>Submitting request...";
    },
    function (response) {
      document.getElementById("g_body").innerHTML = "<h2>Remove My Number</h2>";
      if(response.responseXML.documentElement.tagName == "errors") {
        for (x=0; x<response.responseXML.documentElement.childNodes.length; x++) {
          error = response.responseXML.documentElement.childNodes[x];
          if (error.tagName == "error") {
            document.getElementById("g_body").innerHTML += error.firstChild.nodeValue + "<br>";
            if(error.firstChild.nodeValue == "There is already a pending request for this number.") {
              document.getElementById("g_body").innerHTML += "<p><a href=\"verify\" class=\"button\">Confirm Validation Code</a>";
            }
          }
        }
      }
      else {
        for (x=0; x<response.responseXML.documentElement.childNodes.length; x++) {
          node = response.responseXML.documentElement.childNodes[x];
          if (node.tagName == "confirmation") {
            document.getElementById("g_body").innerHTML += node.firstChild.nodeValue + "<br>";
          }
        }
        document.getElementById("g_body").innerHTML += "<p><a href=\"verify\" class=\"button\">Confirm Validation Code</a>";
      }
    }
  );
}

function resend() {
  // Validate the form
  var errors = new Array();
  if (!LiveValidation.massValidate([npavalidation])) {
    if(document.getElementById("npa").value.length == 0)
      errors[errors.length] = "Area code required.";
    else
      errors[errors.length] = "Invalid area code.";
  }
  if (!LiveValidation.massValidate([nxxvalidation])) {
    if(document.getElementById("nxx").value.length == 0)
      errors[errors.length] = "Dialing prefix required.";
    else
      errors[errors.length] = "Invalid dialing prefix.";
  }
  if (!LiveValidation.massValidate([xxxxvalidation])) {
    if(document.getElementById("xxxx").value.length == 0)
      errors[errors.length] = "Last 4 digits of number required.";
    else
      errors[errors.length] = "Invalid last 4 digits of number.";
  }
  if (errors.length > 0) {
    alert("Please resolve the following issues:\n\t" + errors.join("\n\t"));
    return;
  }

  // Get the form values
  npa = document.getElementById("npa").value;
  nxx = document.getElementById("nxx").value;
  xxxx = document.getElementById("xxxx").value;

  loadpage(
    "/sms/sendcode.php?npa=" + npa + "&nxx=" + nxx + "&xxxx=" + xxxx + "&requesttype=resend",
    function () {
      document.getElementById("g_body").innerHTML = "<h2>Re-send Validation Code</h2>Submitting request...";
    },
    function (response) {
      document.getElementById("g_body").innerHTML = "<h2>Re-send Validation Code</h2>";
      if(response.responseXML.documentElement.tagName == "errors") {
        for (x=0; x<response.responseXML.documentElement.childNodes.length; x++) {
          error = response.responseXML.documentElement.childNodes[x];
          if (error.tagName == "error") {
            document.getElementById("g_body").innerHTML += error.firstChild.nodeValue + "<br>";
          }
        }
      }
      else {
        for (x=0; x<response.responseXML.documentElement.childNodes.length; x++) {
          node = response.responseXML.documentElement.childNodes[x];
          if (node.tagName == "confirmation") {
            document.getElementById("g_body").innerHTML += node.firstChild.nodeValue + "<br>";
          }
        }
        document.getElementById("g_body").innerHTML += "<p><a href=\"verify\" class=\"button\">Confirm Validation Code</a>";
      }
    }
  );
}

function verifyme() {
  // Validate the form
  var errors = new Array();
  if (!LiveValidation.massValidate([npavalidation])) {
    if(document.getElementById("npa").value.length == 0)
      errors[errors.length] = "Area code required.";
    else
      errors[errors.length] = "Invalid area code.";
  }
  if (!LiveValidation.massValidate([nxxvalidation])) {
    if(document.getElementById("nxx").value.length == 0)
      errors[errors.length] = "Dialing prefix required.";
    else
      errors[errors.length] = "Invalid dialing prefix.";
  }
  if (!LiveValidation.massValidate([xxxxvalidation])) {
    if(document.getElementById("xxxx").value.length == 0)
      errors[errors.length] = "Last 4 digits of number required.";
    else
      errors[errors.length] = "Invalid last 4 digits of number.";
  }
  if (errors.length > 0) {
    alert("Please resolve the following issues:\n\t" + errors.join("\n\t"));
    return;
  }

  // Get the form values
  npa = document.getElementById("npa").value;
  nxx = document.getElementById("nxx").value;
  xxxx = document.getElementById("xxxx").value;
  code = document.getElementById("code").value;

  loadpage(
    "/sms/confirmcode.php?npa=" + npa + "&nxx=" + nxx + "&xxxx=" + xxxx + "&code=" + code,
    function () {
      document.getElementById("g_body").innerHTML = "<h2>Confirm Validation Code</h2>Submitting request...";
    }, 
    function(response) {
      document.getElementById("g_body").innerHTML = "<h2>Confirm Validation Code</h2>";
      if(response.responseXML.documentElement.tagName == "errors") {
        for (x=0; x<response.responseXML.documentElement.childNodes.length; x++) {
          error = response.responseXML.documentElement.childNodes[x];
          if (error.tagName == "error") {
            document.getElementById("g_body").innerHTML += error.firstChild.nodeValue + "<br>";
          }
        }
      }
      else {
        for (x=0; x<response.responseXML.documentElement.childNodes.length; x++) {
          node = response.responseXML.documentElement.childNodes[x];
          if (node.tagName == "confirmation") {
            document.getElementById("g_body").innerHTML += node.firstChild.nodeValue + "<br>";
          }
        }
      }
    }
  );
}

function contact() {
  var httprequest;
  var beforereturn;
  var parameters;

  parameters = "name=" + escape(encodeURI(document.getElementById("name").value));
  parameters += "&email=" + escape(encodeURI(document.getElementById("email").value));
  parameters += "&subject=" + escape(encodeURI(document.getElementById("subject").value));
  parameters += "&message=" + escape(encodeURI(document.getElementById("message").value));
  document.getElementById("g_body").innerHTML = "<h2>Contact Us</h2>Sending Message...<br>Please wait.";
  try { httprequest = new XMLHttpRequest(); } catch(e) {}
  try { httprequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { httprequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  if(httprequest != undefined) {
    httprequest.open("POST", "/sms/contact.php", true);
    httprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    httprequest.setRequestHeader("Content-length", parameters.length);
    httprequest.setRequestHeader("Connection", "close");
    httprequest.onreadystatechange = function () {
      if (httprequest.readyState != 4)  { return; }
      document.getElementById("g_body").innerHTML = "<h2>Contact Us</h2>Thank you for contacting us.  Returning home in 5 seconds...";
      setTimeout("document.location='/'", 5000);
    };
    httprequest.send(parameters);
  }
}

// Cookie handler code borrowed from http://techpatterns.com/downloads/javascript_cookies.php
function setCookie( name, value, expires, path, domain, secure ) 
{
  // set time, it's in milliseconds
  var today = new Date();
  today.setTime( today.getTime() );

  /*
  if the expires variable is set, make the correct 
  expires time, the current script below will set 
  it for x number of days, to make it for hours, 
  delete * 24, for minutes, delete * 60 * 24
  */
  if ( expires )
  {
    expires = expires * 1000 * 60 * 60 * 24;
  }
  var expires_date = new Date( today.getTime() + (expires) );

  document.cookie = name + "=" +escape( value ) +
    ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
    ( ( path ) ? ";path=" + path : "" ) + 
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}

// this fixes an issue with the old method, ambiguous values 
// with this test document.cookie.indexOf( name + "=" );
function getCookie( check_name ) {
  // first we'll split this cookie up into name/value pairs
  // note: document.cookie only returns name=value, not the other components
  var a_all_cookies = document.cookie.split( ';' );
  var a_temp_cookie = '';
  var cookie_name = '';
  var cookie_value = '';
  var b_cookie_found = false; // set boolean t/f default f

  for ( i = 0; i < a_all_cookies.length; i++ )
  {
    // now we'll split apart each name=value pair
    a_temp_cookie = a_all_cookies[i].split( '=' );
	

    // and trim left/right whitespace while we're at it
    cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

    // if the extracted name matches passed check_name
    if ( cookie_name == check_name )
    {
      b_cookie_found = true;
      // we need to handle case where cookie has no value but exists (no = sign, that is):
      if ( a_temp_cookie.length > 1 )
      {
        cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
      }
      // note that in cases where cookie is initialized but no value, null is returned
      return cookie_value;
      break;
    }
    a_temp_cookie = null;
    cookie_name = '';
  }
  if ( !b_cookie_found )
  {
    return null;
  }
}

// this deletes the cookie when called
function delCookie( name, path, domain ) {
  if ( getCookie( name ) ) document.cookie = name + "=" +
    ( ( path ) ? ";path=" + path : "") +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
