var helps_utils = {};

helps_utils.LOCALE = "";

helps_utils.isValid = true;

helps_utils.recaptchaOptions = {
  theme : 'clean',
  tabindex : 28,
  lang : 'en'
};

helps_utils.recaptchaKey = null;

if (window.location.host == 'localhost:8080') {
  helps_utils.recaptchaKey = "6LfaAAMAAAAAAKKdDc-ZALuBkjZ-St5VYtvGZTfa";
}
else if (window.location.host == 'g10to100.appspot.com') {
  helps_utils.recaptchaKey = "6LeMCQMAAAAAAK9cksyHfBA4k2Ea3nbaRc4B_Pk0";
}
else if (window.location.host == 'g10helps.appspot.com') {
  helps_utils.recaptchaKey = "6LeNCQMAAAAAADtuXEGeiDR5SGJoM2e7wtK5JRJD";
}
else if (window.location.host == 'project10tothe100.appspot.com') {
  helps_utils.recaptchaKey = "6LdpEgMAAAAAACTsGLJ5U_paHe8VrjZE1ko1bTnF";
}
else if (window.location.host == 'www.project10tothe100.com') {
  helps_utils.recaptchaKey = "6Ld4NwMAAAAAAJC4lIkr-4cqdSHloJ9ccsKuixto";
}

helps_utils.EN_ERROR_MSG = "Error";
helps_utils.EN_FIELD_EMPTY_MSG = "Please complete the highlighted questions before clicking the 'Submit' button.";
helps_utils.EN_FIELD_LENGTH_MSG = "The highlighted fields have exceeded their character limit. Please update your entry to meet the character limit.";
helps_utils.EN_FIELD_LENGTH_DETAIL_MSG = "The field below has Y characters. Please update your entry to meet the X character limit.";
helps_utils.EN_WORD_COUNT_MSG = "The highlighted fields have exceeded their word count limit. Please update your entry to meet the word count limit.";
helps_utils.EN_WORD_COUNT_DETAIL_MSG = "The field below has Y words. Please update your entry to meet the X word limit.";
helps_utils.EN_VALID_EMAIL_MSG = "Please enter a valid email address.";
helps_utils.EN_URL_MSG = "We don't accept URLs. If you wish to link to a video, please do so in the video submission field of the submission form."

helps_utils.setMainFeedback = function(msg) {
  document.getElementById("feedback_main").innerHTML = msg;
  document.getElementById("feedback_main").style.display = "block";
}

helps_utils.clearMainFeedback = function() {
  document.getElementById("feedback_main").style.display = "none";
  document.getElementById("feedback_main").innerHTML = "";
}

helps_utils.setFieldFeedback = function(fieldName, msg) {
  document.getElementById(fieldName).innerHTML = msg;
  document.getElementById(fieldName).style.display = "block";
}

helps_utils.clearFieldFeedback = function(fieldName) {
  document.getElementById(fieldName).style.display = "none";
  document.getElementById(fieldName).innerHTML = "";
}

helps_utils.validateEmail = function(f) {
  helps_utils.isValid = true;
  if(helps_utils.isFieldEmpty(f.EmailForReminder)) {
    helps_utils.isValid = false;
  }
  
  if (!helps_utils.isValid) {
    helps_utils.setMainFeedback(helps_utils.EN_FIELD_EMPTY_MSG);
    helps_utils.clearFieldFeedback("feedback_" + f.EmailForReminder.name)
    return false;
  } else {
    helps_utils.clearMainFeedback();
  }

  if(!helps_utils.isValidEmail(f.EmailForReminder)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isValid) {
    return false;
  }
  return true;
}

helps_utils.validate = function(f) {
  //helps_utils.populateFields();
  try {

    if(!helps_utils.fieldsComplete(f)) {
      window.location.href = "#feedback";
      return false;
    }

    if (window && window.location) {

      //alert(window.location.href);

      if (window.location.href.indexOf("B5") != -1 ||
          window.location.href.indexOf("CN") != -1 ||
          window.location.href.indexOf("TH") != -1 ||
          window.location.href.indexOf("CN_HK") != -1 ||
          window.location.href.indexOf("JA") != -1) {
        //alert("Viewing a page requiring character counts");
        if(!helps_utils.checkLength(f)) {
          window.location.href = "#feedback";
          return false;
        }
        
      } else {

        if(!helps_utils.checkWordCount(f)) {
          window.location.href = "#feedback";
          return false;
        }
      }
    }

    if(!helps_utils.checkURLs(f)) {
      window.location.href = "#feedback";
      return false;
    }
  
    var vidFeedback = document.getElementById("feedback_video").innerHTML;
    if (f.Video.value != "") {
      if (helps_utils.checkURL(f.Video)) {
        var url = f.Video.value.toLowerCase();
        if (url.indexOf("youtube.com") == -1) {
          if (vidFeedback.indexOf(helps_utils.EN_ERROR_MSG) == -1) {
            document.getElementById("feedback_video").innerHTML = helps_utils.EN_ERROR_MSG + " - " + document.getElementById("feedback_video").innerHTML;
          }
          window.location.href = "#video";
          return false;
        }
        else {
          f.Video.parentNode.style.color="#000";
          document.getElementById("feedback_video").innerHTML = vidFeedback.replace(helps_utils.EN_ERROR_MSG + " - ", "");
        }
      }
      else {
        f.Video.parentNode.style.color="#F00";
        if (vidFeedback.indexOf(helps_utils.EN_ERROR_MSG) == -1) {
          document.getElementById("feedback_video").innerHTML = helps_utils.EN_ERROR_MSG + " - " + document.getElementById("feedback_video").innerHTML;
        }
        window.location.href = "#video";
        return false;
      }
    }
    else {
      f.Video.parentNode.style.color="#000";
      document.getElementById("feedback_video").innerHTML = vidFeedback.replace(helps_utils.EN_ERROR_MSG + " - ", "");
    }
  
    if(!helps_utils.isValidEmail(f.EmailAddress)) {
      window.location.href = "#email";
      return false;
    }
  
    // ToS checkbox - TOS
    if (helps_utils.isCheckboxEmpty(f.TOS)) {
      helps_utils.isValid = false;
    }
    
    if (Recaptcha.get_response() == "") {
      helps_utils.isValid = false;
      document.getElementById("feedback_captcha").style.color = "#F00";
    } else {
      document.getElementById("feedback_captcha").display = "none";
    }
  
    if (!helps_utils.isValid) {
      helps_utils.setMainFeedback(helps_utils.EN_FIELD_EMPTY_MSG);
      window.location.href = "#feedback";
      return false;
    } else {
      helps_utils.clearMainFeedback();
    }
  
    var date = new Date();
    f.key_name.value = f.EmailAddress.value + "_" + date.getFullYear() + "-" + (date.getMonth()+1) + "-" + date.getDate() + "_" + (date.getHours()) + "-" + date.getMinutes() + "-" + date.getSeconds() + "-" + date.getMilliseconds();
  
    helps_utils.escape(f);
  
    //f.submit();
    return true;
  } catch (e) {
    return false;
  }
}

helps_utils.isValidEmail = function(field, fieldFlag) {

  var str = field.value;
  
  if (str.indexOf("@") > 0) {
    var ss = str.substring(str.indexOf("@")+1, str.length);

    if (ss.indexOf(".") > 0) {
      var ss2 = ss.substring(ss.indexOf(".")+1, ss.length)
      if (ss2.length > 1) {
        helps_utils.setLabelOk(field);
        helps_utils.clearFieldFeedback("feedback_" + field.name);
        return true;
      }
    }
  }
  helps_utils.setLabelError(field);
  helps_utils.setFieldFeedback("feedback_" + field.name, helps_utils.EN_VALID_EMAIL_MSG);
  return false;
}

helps_utils.checkURL = function(field) {
  var re1 = /([A-Za-z0-9]{3,4}\.)+([A-Za-z-]{2,}\.)+([A-Za-z]{2,4})\b/;
  var re2 = /((ht|f)tp(s?):\/\/)+([A-Za-z-]{2,}\.)+([A-Za-z]{2,4})\b/;

  if (re1.test(field.value) || re2.test(field.value)) {
    helps_utils.setLabelError(field);
    return true;
  } else {
    helps_utils.setLabelOk(field);
    return false;
  }
}

helps_utils.escape = function(f) {
  
  for (element in f) {
    try {    
      if (f[element].value.indexOf("<") != -1) {
        f[element].value = f[element].value.replace(/</g, "&lt;");
      }
      if (f[element].value.indexOf(">") != -1) {
        f[element].value = f[element].value.replace(/>/g, "&gt;");
      }
    }
    catch(e) {
    }
  }
}

helps_utils.fieldsComplete = function(f) {
  helps_utils.isValid = true;
  if(helps_utils.isFieldEmpty(f.Name)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.MailingAddress)) {
    helps_utils.isValid = false;
  }

  if(helps_utils.isFieldEmpty(f.EmailAddress)) {
    helps_utils.isValid = false;
  }

  if (f.Language.selectedIndex == 0) {
    helps_utils.isValid = false;
    helps_utils.setLabelError(f.Language);
  } else {
    helps_utils.setLabelOk(f.Language);
  }

  if(helps_utils.isFieldEmpty(f.Nickname)) {
    helps_utils.isValid = false;
  }

  if(helps_utils.isFieldEmpty(f.City)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.Country)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.IdeaName)) {
    helps_utils.isValid = false;
  }

  var count = 0;  
  if (document.getElementById("Community").checked == true) {
    count++;
  }
  if (document.getElementById("Opportunity").checked == true) {
    count++;
  }
  if (document.getElementById("Energy").checked == true) {
    count++;
  }
  if (document.getElementById("Environment").checked == true) {
    count++;
  }
  if (document.getElementById("Health").checked == true) {
    count++;
  }
  if (document.getElementById("Education").checked == true) {
    count++;
  }
  if (document.getElementById("Shelter").checked == true) {
    count++;
  }
  if (document.getElementById("Else").checked == true) {
    count++;
  }
  
  /*
  var radios = document.getElementsByTagName("input");
  var count = 0;  
  for (rb in radios) {
    if (radios[rb].className == "Category") {
      if (radios[rb].checked == true) {
        ++count;
      }
    }
  }
  */
  if (count == 0) {
    helps_utils.isValid = false;
    document.getElementById("CategoryLabel").style.color = "#F00";
  } else {
    document.getElementById("CategoryLabel").style.color = "#000";
  }
  
  if(helps_utils.isFieldEmpty(f.IdeaDescribe)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.IdeaDepth)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.IdeaIssue)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.IdeaReality)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.IdeaGround)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.isFieldEmpty(f.IdeaOutcome)) {
    helps_utils.isValid = false;
  }
  
  if (!helps_utils.isValid) {
    helps_utils.setMainFeedback(helps_utils.EN_FIELD_EMPTY_MSG);
    return false;
  } else {
    helps_utils.clearMainFeedback();
    return true;
  }
}
  
helps_utils.checkLength = function(f) {
  helps_utils.isValid = true;

  if (!helps_utils.isFieldLengthUnder(f.IdeaDescribe, 150)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isFieldLengthUnder(f.IdeaDepth, 900)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isFieldLengthUnder(f.IdeaIssue, 450)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isFieldLengthUnder(f.IdeaReality, 450)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isFieldLengthUnder(f.IdeaGround, 450)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isFieldLengthUnder(f.IdeaOutcome, 450)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isFieldLengthUnder(f.Organization, 150)) {
    helps_utils.isValid = false;
  }

  if (!helps_utils.isValid) {
    helps_utils.setMainFeedback(helps_utils.EN_FIELD_LENGTH_MSG);
    return false;
  } else {
    helps_utils.clearMainFeedback();
    return true;
  }
}

helps_utils.checkWordCount = function(f) {
  helps_utils.isValid = true;
  if (!helps_utils.isFieldLengthUnder(f.IdeaDescribe, 150)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isWordCountUnder(f.IdeaDepth, 300)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isWordCountUnder(f.IdeaIssue, 150)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isWordCountUnder(f.IdeaReality, 150)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isWordCountUnder(f.IdeaGround, 150)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isWordCountUnder(f.IdeaOutcome, 150)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isWordCountUnder(f.Organization, 50)) {
    helps_utils.isValid = false;
  }
  if (!helps_utils.isValid) {
    helps_utils.setMainFeedback(helps_utils.EN_WORD_COUNT_MSG);
    return false;
  } else {
    helps_utils.clearMainFeedback();
    return true;
  }
}

helps_utils.checkURLs = function(f) {
  helps_utils.isValid = true;

  if(helps_utils.checkURL(f.Name)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.MailingAddress)) {
    helps_utils.isValid = false;
  }

  if(helps_utils.checkURL(f.Nickname)) {
    helps_utils.isValid = false;
  }

  if(helps_utils.checkURL(f.City)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.Country)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.IdeaName)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.IdeaDescribe)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.IdeaDepth)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.IdeaIssue)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.IdeaReality)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.IdeaGround)) {
    helps_utils.isValid = false;
  }
  
  if(helps_utils.checkURL(f.IdeaOutcome)) {
    helps_utils.isValid = false;
  }

  if(helps_utils.checkURL(f.Organization)) {
    helps_utils.isValid = false;
  }

  if (!helps_utils.isValid) {
    helps_utils.setMainFeedback(helps_utils.EN_URL_MSG);
    return false;
  } else {
    helps_utils.clearMainFeedback();
    return true;
  }
}

helps_utils.setLabelError = function(node) {
  node.parentNode.style.color="#F00";
}

helps_utils.setLabelOk = function(node) {
  node.parentNode.style.color="#000";
}

helps_utils.isFieldEmpty = function(field) {
  if (field.value == "") {
    helps_utils.setLabelError(field);
    return true;
  } else {
    helps_utils.setLabelOk(field);
    return false;
  }
}

helps_utils.isCheckboxEmpty = function(cb) {
  if (cb.checked == false) {
    helps_utils.setLabelError(cb);
    return true;
  } else {
    helps_utils.setLabelOk(cb);
    return false;
  }
}

helps_utils.isFieldLengthUnder = function(field, len) {
  if (field.value.length <= len) {
    helps_utils.setLabelOk(field);

    helps_utils.clearFieldFeedback("feedback_" + field.name);
    return true;
  } else {
    helps_utils.setLabelError(field);
    var msg = helps_utils.EN_FIELD_LENGTH_DETAIL_MSG.replace("Y", field.value.length);
    msg = msg.replace("X", len);
    helps_utils.setFieldFeedback("feedback_" + field.name, msg);
    return false;
  }
}

helps_utils.isWordCountUnder = function(field, count) {
  var words = field.value.split(" ");
  
  if (words.length <= count) {
    helps_utils.setLabelOk(field);
    helps_utils.clearFieldFeedback("feedback_" + field.name);
    return true;
  } else {
    helps_utils.setLabelError(field);
    var msg = helps_utils.EN_WORD_COUNT_DETAIL_MSG.replace("Y", words.length);
    msg = msg.replace("X", count);
    helps_utils.setFieldFeedback("feedback_" + field.name, msg);
    return false;
  }
}

helps_utils.toggleRecaptcha = function() {
  if (document.getElementById("recaptchaContainer").style.display == "none") {
    Recaptcha.create(helps_utils.recaptchaKey, "recaptchaDiv", helps_utils.recaptchaOptions);
    document.getElementById("recaptchaContainer").style.display = "block"
    return;
  } else {
    document.getElementById("recaptchaContainer").style.display = "none"
    Recaptcha.destroy();
    return;
  }
}
