var msgBgColor = "#C68D8E";

function translate(translationName) {
  if(typeof(translations) == "undefined") {
    return "";
  }
  if(typeof(lang) == "undefined") {
    lang="en";
  }
  if(!translations[translationName]) {
    return "";
  }
  var translationValues = translations[translationName];
  if(!translationValues) {
    return "";
  }

  if(!translationValues[lang]) {
    //if no translationValue for current language and language is not english return english value if exists
    if(lang!="en" && translationValues["en"]) {
      return translationValues["en"];
    }
    return "";
  }
  return translationValues[lang];
}


function getLabelForField(fieldName){
  //get the description of the field from the translation dic
//  var translationName = "js_field_description_" + fieldName;
//  return translate(translationName);



  //Get the innerText of the <label> which "for" attribute is fieldName
  var labels = document.getElementsByTagName("label");
  for(var i=0;i<labels.length;i++) {
    if(labels[i].getAttribute("for") != null && labels[i].getAttribute("for") == fieldName) {
      //remove ":",".","*" characters
      return '"' + labels[i].innerHTML.replace(/[\:|\.|\*]/g, "") + '"';
    }
  }
  return "This field";

}

function checkForm(formElements) {
  var msg="";
  var fieldToFocus="";
  for(var requiredFieldCount=0; requiredFieldCount < requiredFields.length; requiredFieldCount++) {
    var fieldName = requiredFields[requiredFieldCount][0];
    //var fieldDescription = requiredFields[requiredFieldCount][1];
    var fieldType = requiredFields[requiredFieldCount][2];
    //reset element to default background color
    setFormElementBgColor(formElements[fieldName], "");
    switch(fieldType) {
      case "text":
	if(!formElements[fieldName]) {
	  break;
	}
	if(formElements[fieldName].value == "") {
	  if(msg==""){
	    msg = getLabelForField(fieldName) + " " + translate("js_required_field");//" cannot be empty.\r\n";
	  }
	  if(fieldToFocus=="") {
	    fieldToFocus=formElements[fieldName];
	  }
	  setFormElementBgColor(formElements[fieldName], msgBgColor);
	} else {
	  if(fieldName.toLowerCase().indexOf("email")>-1) {
	    if(!isValidEmail(formElements[fieldName].value)) {
	      if(msg=="")
		msg =  '"' + formElements[fieldName].value+ '" ' + translate("swf_html_error_email");//"The email address is invalid.\r\n";
	      if(fieldToFocus==""){
		fieldToFocus=formElements[fieldName];
	      }

	      setFormElementBgColor(formElements[fieldName], msgBgColor);
	    }
	  }
	}
      break;
    case "select":
      if(!formElements[fieldName]) {
	break;
      }
      if(formElements[fieldName].selectedIndex == 0) {
	if(msg=="") {
	  msg = getLabelForField(fieldName)  + " " + translate("js_required_field") + "\r\n";
	}

	if(fieldToFocus==""){
	  fieldToFocus=formElements[fieldName];
	}

	setFormElementBgColor(formElements[fieldName], msgBgColor);
      }
      break;

    case "radio":
      var radioElements = formElements[fieldName];
      if(!radioElements || !radioElements.length) {
	break;
      }
      var atLeastOneRadioSelected = false;
      for(var radioCount=0; radioCount<radioElements.length; radioCount++) {
	if(radioElements[radioCount].checked) {
	  atLeastOneRadioSelected = true;
	  break;
	}
      }
      if(!atLeastOneRadioSelected) {
	if(msg=="")
	   //msg = "Please select a " + getLabelForField(fieldName) + ".\r\n";
	  msg = getLabelForField(fieldName)  + " " + translate("js_required_field") + "\r\n";
	if(fieldToFocus==""){
	  fieldToFocus=formElements[fieldName][0];
	}

	setFormElementBgColor(formElements[fieldName], msgBgColor);
      }
      break;
    }
  }
  if(msg!="") {
    alert(msg);
    if(fieldToFocus) {
      try {
	fieldToFocus.focus();
      } catch(e) {

      }
    }
    return false;
  }
  return true;
}

function checkBookForm(formElements) {
  //check that at least one book quantity input has been filled
  //book quantity input names have this format: book_1_language_1
  var orderedQuantities=0;
  for(var formElementCount=0; formElementCount < formElements.length; formElementCount++) {
    var formElement =formElements[formElementCount];
    if(formElement.name && formElement.name.length>16) {
      if(formElement.name.substring(0, 5)=="book_") {
      if(isNumeric(formElement.value)) {
	     return checkForm(formElements);
       }
      }
    }
  }
  alert("Please enter at least one book quantity.");
  return false;
}

function setFormElementBgColor(formElement, color) {
  if(formElement && formElement.style) {
    formElement.style.backgroundColor = color;
  }
}

function isValidEmail(email) {
  var err="";
  var iChars = "*|,\":<>[]{}`';()&$#%";
  var eLength = email.length;
  for (var i=0; i < eLength; i++)    {
    if (iChars.indexOf(email.charAt(i)) != -1){
      return false;
    }
  }

  var atIndex = email.lastIndexOf("@");
  if(atIndex < 1 || (atIndex == eLength - 1))    {
    return false;
  }
  var pIndex = email.lastIndexOf(".");
  if(pIndex < 4 || (pIndex == eLength - 1)){
    return false;
  }
  if(atIndex > pIndex){
    return false;
  }

  for (var i = 0; i<eLength; i++) {
    if ((email.charAt(i) == "." || email.charAt(i) == "@") && email.charAt(i) == email.charAt(i-1)) {
      return false;
    }
  }
  return true;
}


function isNumeric(sText) {
  if(sText=="") {
    return false;
  }
  var validChars = "0123456789.";
  var isNumber=true;
  var c;
  for (i = 0; i < sText.length && isNumber == true; i++) {
    c = sText.charAt(i);
    if(validChars.indexOf(c) == -1) {
      return false;
    }
  }
  return true;
}