window.onload = function()
{
  if (document && document.forms && document.forms[0])
  {
    var reqruitForm = document.forms[0];

    reqruitForm.onsubmit = function()
    {
      return validateForm(reqruitForm);
    }

    initForm(reqruitForm);

  }
}

/**
* Loop through all the form elements and validate them if needed
*
* @param object form
* @return void
*/
function validateForm(form)
{
  var formValid = true;

  var reqruitFormInputElems    = form.getElementsByTagName('input');
  var reqruitFormTextAreaElems = form.getElementsByTagName('textarea');

  var i = 0;

  for (i = 0; i < reqruitFormInputElems.length; i++)
  {
    var curElem      = reqruitFormInputElems[i];

    if (typeof(curElem) == 'object')
    {
      var curElemType  = (curElem.type) ? curElem.type : '';

      if (curElemType.toLowerCase() == 'text')
      {
        if (curElem.getAttribute && curElem.getAttribute('valid') == 'false')
        {
          if (!validateRequired(curElem))
            formValid = false;

        }
      }
    }
  }

  for (j = 0; j < reqruitFormTextAreaElems.length; j++)
  {
    var curElem      = reqruitFormTextAreaElems[j];

    if (typeof(curElem) == 'object')
    {
      if (curElem.getAttribute && curElem.getAttribute('valid') == 'false')
      {
        if (!validateRequired(curElem))
          formValid = false;

      }
    }
  }

  if (!formValid)
  {
    alert('Please fill in all required fields before submitting the form\n(required fields have a red border around them).');
  }
  else
  {
    // Lets replace all newlines so it will show up good on the forum
    for (j = 0; j < reqruitFormTextAreaElems.length; j++)
    {
      var curElem      = reqruitFormTextAreaElems[j];

      if (typeof(curElem) == 'object')
      {
        changeNlToBr(curElem);
      }
    }
  }

  return formValid;
}

/**
* Function that initializes the form replacing input fields into textarea when the label starts with textarea:
*
* @param object form
* @return void
*/
function initForm(form)
{
  var reqruitFormElems = form.getElementsByTagName('input');

  var i = 0;

  for (i = 0; i < reqruitFormElems.length; i++)
  {
    var curElem      = reqruitFormElems[i];

    if (typeof(curElem) == 'object')
    {
      var curElemType  = (curElem.type) ? curElem.type : '';

      if (curElemType.toLowerCase() == 'text')
      {
        var curElemName = curElem.name;

        var parentContainer = curElem.parentNode;
        var parentOfParentContainer = parentContainer.parentNode;

        if (typeof(parentOfParentContainer) == 'object')
        {
          var j = 0;

          for (j = 0; j < parentOfParentContainer.childNodes.length; j++)
          {
            if (parentOfParentContainer.childNodes[j].className && parentOfParentContainer.childNodes[j].className == 'label')
            {
              var labelDiv  = parentOfParentContainer.childNodes[j];
              var label     = labelDiv.innerHTML;
              var newLabel  = label.replace(/textarea:/, '');

              var isRequired = false;

              if (parentOfParentContainer.parentNode.id == 'recruit-required')
                isRequired = true;

              if (label != newLabel)
              {
                labelDiv.innerHTML = newLabel;

                if (typeof(parentContainer) == 'object')
                {

                  parentContainer.innerHTML = '<textarea class="textarea" name=' + curElemName + (isRequired ? ' onblur="validateRequired(this);" valid="false" ' : ' valid="true" ') + ' cols="60" rows="4" style="width: 50%;">' + curElem.value + '</textarea><div class="clear">';

                  // Since the input element is removed and we loop against a reference we should also decrease our index a bit.
                  i--;
                }

              }
              else
              {
                if (isRequired)
                  curElem.setAttribute('valid', 'false');
                else
                  curElem.setAttribute('valid', 'true');

              }
            }
          }
        }

      }
    }
  }
}

/**
* Validates if a field is filled in or not
*
* @param object elem
* @return void
*/
function validateRequired(elem)
{
  var validRequired = false;

  if (elem && typeof(elem) == 'object')
  {
    if (elem.value == '')
    {
      elem.style.borderColor = 'red';
      elem.setAttribute('valid', 'false');
    }
    else
    {
      validRequired = true;
      elem.style.borderColor = '#A4C9E3';
      elem.setAttribute('valid', 'true');
    }
  }

  return validRequired;
}

/**
* Replaces all newline characters to html <br />
*
* @param object elem
* @return void
*/
function changeNlToBr(elem)
{

  if (elem && typeof(elem) == 'object')
  {
    var value = elem.value;
    value     = value.replace(/\n/g, '<br />');
    elem.value = value;
  }

}
